<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /*
            js本身不是正统(Java, C++)的面向对象的语言
            js是面向原型的语言(js中面向对象 --- 面向原型)

            1. 构造函数
            作用: 创建对象的
            细节: 
            1) 构造函数首字母大写   
            2) 只有通过new关键字调用的函数, 这个函数才是构造函数

            2. 为什么new一下就能产生对象, new到底做了什么?(面试题)
            - 创建一个新的对象
            - 让函数内部的this指向这个新的对象
            - 执行这个构造函数(把内部的属性添加到对象中)
            - 返回新对象
            */

        // 1. 构造函数
        function Person(name, age, sex) {
            this.name = name
            this.age = age
            this.sex = sex
        }

        // 2. 构造函数的原型对象
        Person.prototype.eat = () => {
            console.log('吃东西')
        }
        console.log(Person.prototype)
        console.log(Person.prototype.constructor)

        const p1 = new Person('张三', 18, '男')
        console.log(p1)

        const p2 = new Person('李四', 20, '女')
        console.log(p2)

        p1.__proto__.eat()

        console.log(p1.__proto__.eat === p2.__proto__.eat)
    </script>
</body>

</html>